#pragma once
#include "vector3.h"
#include "matrix.h"
#include "TypeDefs.h"
#include "frustum.h"
#include "ICamera.h"
class Camera : public ICamera
{
public:
	Camera(void);
	~Camera(void);
	void SetOrientation(vector3 &rot);
	void SetPosition(vector3 &pos);
	vector3 GetOrientation() const;
	vector3 GetPosition() const;
	matrix GetViewMatrix() const;
	matrix GetBillboardMatrix() const;
	matrix GetProjection() const;
	matrix GetViewProjectionMatrix() const;
	vector3 MoveFacing(const vector3 &movement);
	vector3 GetDirection() const;
	const frustum &GetCullingFrustum() const {
		return m_cullingFrustum; };
protected:
	void _RecalcViewMatrix();
	void _RecalcFrustum();

private:
	vector3 m_position;
	vector3 m_orientation;
	matrix m_matProjection;
	matrix m_matView;
	frustum m_cullingFrustum;
	float m_fFov;
};

